package com.eatrip.service.implementation;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.eatrip.bean.DatiLocale;
import com.eatrip.bean.DettagliLocale;
import com.eatrip.dao.DatiLocaleDAO;
import com.eatrip.service.DatiLocaleService;

@Service
public class DatiLocaleServiceImple implements DatiLocaleService {
	
	@Autowired
	private DatiLocaleDAO datiLocaleDAO;
	
	@Override
	@Transactional(readOnly = true)
	public DatiLocale getDatiLocale(int idLocale) {
		return datiLocaleDAO.getDatiLocale(idLocale);
	}

	
	
	@Override
	@Transactional(readOnly = true)
	public List<DatiLocale> getDatiLocaleBestValutazione(int numRow) {
		return datiLocaleDAO.getDatiLocaleBestValutazione(numRow);
	}


	

	
	@Override
	@Transactional(readOnly = true)
	public List<DatiLocale> getDatiEDettagliLocaleByNomeComune(String nome,int start,int numRow) {
		return datiLocaleDAO.getDatiEDettagliLocaleByNomeComune(nome,start,numRow);
	}

	
	@Override
	@Transactional(readOnly = true)
	public List<DatiLocale> getDatiEDettagliLocaleByRegione(String nome,
			int start, int numRow) {
		
		return datiLocaleDAO.getDatiEDettagliLocaleByRegione(nome, start, numRow);
	}

	@Override
	@Transactional(readOnly = true)
	public List<DatiLocale> getDatiEDettagliLocaleByRegione(String nome,int start,int numRow,DettagliLocale dettagli){
		
		String query=createQueryFromDettagli(dettagli);
		
		return datiLocaleDAO.getDatiEDettagliLocaleByRegione(nome, start, numRow, query);
	}

	@Override
	@Transactional(readOnly = true)
	public List<DatiLocale> getDatiEDettagliLocaleByComuneEDettagli(
			String nome, int start, int numRow, DettagliLocale dettagli) {
		
		String query=createQueryFromDettagli(dettagli);
		
		return datiLocaleDAO.getDatiEDettagliLocaleByComuneEDettagli(nome, start, numRow, query);
	}



	@Override
	@Transactional(readOnly = false)
	public void deleteDatiLocale(DatiLocale datiLocale) {
		datiLocaleDAO.deleteDatiLocale(datiLocale);
	}

	@Override
	@Transactional(readOnly = false)
	public void insertDatiLocale(DatiLocale datiLocale) {
		datiLocaleDAO.insertDatiLocale(datiLocale);
	}

	@Override
	@Transactional(readOnly = false)
	public void updateDatiLocale(DatiLocale datiLocale) {
		datiLocaleDAO.updateDatiLocale(datiLocale);
	}

	@Override
	@Transactional(readOnly = false)
	public void deleteAllDatiLocale() {
		datiLocaleDAO.deleteAllDatiLocale();
	}

	@Override
	@Transactional(readOnly = true)
	public List<DatiLocale> getAllDatiLocale() {
		return datiLocaleDAO.getAllDatiLocale();
	}



	@Override
	public DatiLocale getDatiEDettagliLocaleByEmail(String email) {
		return datiLocaleDAO.getDatiEDettagliLocaleByEmail(email);
	}
	
	/**
	 * ritorna la query da effettuare attraverso la selezione dei dettagli 
	 * Imp nella query specificare DettagliLocale de
	 * 
	 */
	public String createQueryFromDettagli(DettagliLocale dettagli){
		String query="";
		if (dettagli != null){
			if (dettagli.getAllAperto() != null)
				query+=" de.allAperto = '1' AND ";
			if (dettagli.getAnimali() != null)
				query+=" de.animali = '1' AND ";
			if (dettagli.getCeliaci() != null)
				query+=" de.celiaci = '1' AND ";
			if (dettagli.getCucinaTipica() != null)
				query+=" de.cucinaTipica = '1' AND ";
			if (dettagli.getMusicaDalVivo() != null)
				query+=" de.musicaDalVivo = '1' AND ";
			if (dettagli.getParcheggio() != null)
				query+=" de.parcheggio = '1' AND "; 
			if (dettagli.getRicevimenti() != null)
				query+=" de.ricevimenti = '1' AND ";
			if (dettagli.getSalaFumatori() != null)
				query+=" de.salaFumatori = '1' AND ";
			if (dettagli.getSkyMediaset() != null)
				query+=" de.skyMediaset = '1' AND ";
			if (dettagli.getVistaMare() != null)
				query+=" de.vistaMare = '1' AND ";
			if (dettagli.getWifi() != null)
				query+=" de.wifi = '1' AND ";
			if (dettagli.getDaAsporto() != null)
				query+=" de.daAsporto = '1' AND";
		}
		
		return query;
	}
	

}
